using Domain.Entities.Enums;
using System;
using System.Collections.Generic;

namespace Domain.Entities
{
    public class Topic
    {
        private int id;
        private string subject;
        private TopicType type;
        private DateTime postDateTime;
        private bool locked;
        private int numberOfReplies;

        private Forum forum;
        private Message startMessage;
        private Message lastMessage;

        private IList<Message> messages;
        private IList<Bookmark> bookmarks;

        public virtual int Id
        {
            get { return id; }
            internal set { id = value; }
        }

        public virtual string Subject
        {
            get { return subject; }
            internal set { subject = value; }
        }

        public virtual TopicType Type
        {
            get { return type; }
            internal set { type = value; }
        }

        public virtual DateTime PostDateTime
        {
            get { return postDateTime; }
            internal set { postDateTime = value; }
        }

        public virtual bool Locked
        {
            get { return locked; }
            internal set { locked = value; }
        }

        public virtual int NumberOfReplies
        {
            get { return numberOfReplies; }
            internal set { numberOfReplies = value; }
        }

        public virtual Forum Forum
        {
            get { return forum; }
            internal set { forum = value; }
        }

        public virtual Message StartMessage
        {
            get { return startMessage; }
            internal set { startMessage = value; }
        }

        public virtual Message LastMessage
        {
            get { return lastMessage; }
            internal set { lastMessage = value; }
        }

        public virtual IList<Message> Messages
        {
            get { return messages; }
            internal set { messages = value; }
        }

        public virtual IList<Bookmark> Bookmarks
        {
            get { return bookmarks; }
            internal set { bookmarks = value; }
        }
    }
}
